home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
AMIGA
/
AMICUS
/
AMICUS11.ADF
/
AmigaBasicProgs
/
Grids.MSB
(
.txt
)
< prev
next >
Wrap
AmigaBASIC Source Code
|
1986-08-05
|
3KB
|
182 lines
' "Grids"
' by David Matthews
' freely distributable
' simple AmigaBasic pgm.
' have fun with sound waveshapes (timbre)
' and amplitude envelopes (ADSR...attack,decay,sustain,release)
WINDOW 2,"TIMBRE",(60,53)-(600,186),6
WINDOW 3,"ADSR" ,(330,0)-(630,49),6
DEFINT a-z
x = 0
REM your tune here
FOR t = 1 TO 5 : READ tune(t) : NEXT t
DATA 261.63,293.66,233.47,116.73,174.61
DIM smooth.timbre% (255)
DIM timbre% (255)
DIM adsr% (40)
DIM smooth.adsr% (40)
WINDOW OUTPUT 1
PRINT "Click left mouse button to draw grid...."
PRINT "Hold left button and drag to draw graph."
PRINT "Drag off right edge to enter data......."
PRINT "Press any key to hear it................"
a$ = " mouse a graph from left to right "
WINDOW OUTPUT 3
PRINT : PRINT : PRINT
PRINT a$
WINDOW OUTPUT 2
PRINT : PRINT : PRINT
PRINT a$
ON MOUSE GOSUB top
WHILE 1
GOSUB makeSound
MOUSE ON
WEND
top:
MOUSE OFF
IF WINDOW(0) = 2 THEN GOSUB TIMBREtop
IF WINDOW(0) = 3 THEN GOSUB ADSRtop
RETURN
TIMBREtop:
WINDOW 2 : CLS
GOSUB drawTIMBREgrid
GOSUB initTIMBREarray
x = MOUSE(1)
GOSUB TIMBREmouse
RETURN
TIMBREmouse:
IF MOUSE(0) = 0 THEN TIMBREmouse
IF MOUSE(0) <> 0 THEN
IF MOUSE(1) => 10 AND MOUSE(1) <= 521 THEN
IF MOUSE(2) =< 125 AND MOUSE(2) => 1 THEN GOSUB TIMBREdot
END IF
END IF
IF MOUSE(1) < 522 THEN TIMBREmouse
GOSUB TIMBREread
RETURN
TIMBREdot:
x = MOUSE(1) : y = MOUSE(2)
n = INT ((x-10)/2 )
timbre(n)=y
PSET(x,y),3
RETURN
TIMBREread:
FOR x = 10 TO 521 STEP 2
y = ((x-10)\2)
z = timbre(y) * 2 - 128
IF z = -128 AND y > 0 THEN z = smooth.timbre(y-1)
smooth.timbre(y) = z
PSET (x,129),3
NEXT x
WAVE 0,smooth.timbre
RETURN
initTIMBREarray:
FOR i = 0 TO 255
timbre(i)=0
NEXT i
RETURN
drawTIMBREgrid:
x = 0 : y =1 : y1 = 126
FOR i = 2 TO 59
x = x + 9
IF i = 31 THEN c = 1 :ELSE c = 2
LINE (x,y)-(x,y1),c
NEXT i
x = 10 : y= 1 : x1 = 521
FOR i = 1 TO 26
IF i = 13 THEN c = 1 :ELSE c = 2
LINE (x,y)-(x1,y),c
y = y + 5
NEXT i
RETURN
ADSRtop:
WINDOW 3 : CLS
GOSUB drawADSRgrid
GOSUB initADSRarray
x = MOUSE(1)
GOSUB ADSRmouse
RETURN
ADSRmouse:
IF MOUSE(0) = 0 THEN ADSRmouse
IF MOUSE(0) <> 0 THEN
IF MOUSE(1) => 20 AND MOUSE(1) <=260 THEN
IF MOUSE(2) =< 40 AND MOUSE(2) => 1 THEN GOSUB ADSRdot
END IF
END IF
IF MOUSE(1) < 261 THEN ADSRmouse
GOSUB ADSRread
RETURN
ADSRdot:
x = MOUSE(1) : y = MOUSE(2)
n = INT ((x-20) / 6)
adsr(n)=y
PSET(x,y),3
RETURN
ADSRread:
FOR x = 0 TO 39
z = 240 - adsr(x) * 6
IF z = 240 AND x > 0 THEN z = smooth.adsr(x-1)
smooth.adsr(x) = z
PSET ((x*6)+20,43),3
NEXT
RETURN
drawADSRgrid:
x = 10 : y =1 : y1 = 40
FOR i = 1 TO 25
x = x + 10
IF i = 1 THEN c = 1 :ELSE c = 2
LINE (x,y)-(x,y1),c
NEXT i
x = 20 : y= 1 : x1 = 260
FOR i = 1 TO 9
IF i = 9 THEN c = 1 :ELSE c = 2
LINE (x,y)-(x1,y),c
y = y + 5
NEXT i
RETURN
initADSRarray:
FOR i = 0 TO 39
adsr(i)=0
NEXT i
RETURN
makeSound:
IF INKEY$ = "" THEN RETURN
MOUSE OFF
FOR t = 1 TO 5
n = tune(t)
FOR i = 0 TO 39
SOUND n,0.2,(smooth.adsr(i)),0
NEXT i
NEXT t
RETURN